#include <sys/stat.h>
#include <fcntl.h>
#include "stdio.h"
#include <unistd.h>
#include <sys/mman.h>

int lcdfd;
int *lcdmem;

int red = 0x00ff0000;
int green = 0x0000ff00;
int blue = 0x000000ff;
int yellow = 0x00ffff00;
int white = 0x00ffffff;
int black = 0x00000000;

//lcdmem + x + 800 * y

int main()
{
    lcdfd = open("/dev/fb0",O_RDWR);
    if(lcdfd == -1)
    {
        perror("open /dev/fb0 error");
    }

    lcdmem =  mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE, MAP_SHARED, lcdfd, 0);
    if(lcdmem == MAP_FAILED)
    {
        perror("mmap error");
    }

    int x,y;
    while (1)
    {
        for(y=0; y<480; y++)
        {
            for(x=0; x<800; x++)
            {
                if(y<220)
                {
                    if(x>246 && x<286)
                    {
                        *(lcdmem+x+800*y) = yellow;
                    }else
                    {
                        *(lcdmem+x+800*y) = blue;
                    }
                }
                else if(y>=220 && y<260)
                {
                    *(lcdmem+x+800*y) = yellow;
                }
                else if(y>=260 && y<800)
                {
                    if(x>246 && x<286)
                    {
                        *(lcdmem+x+800*y) = yellow;
                    }else
                    {
                        *(lcdmem+x+800*y) = blue;
                    }
                }
            }
        }

        sleep(1);//睡眠3秒

        for(y=0; y<480; y++)
        {
            for(x=0; x<800; x++)
            {
                if(y<160)
                {
                    *(lcdmem+x+800*y) = black;
                }
                else if(y>=160 && y<320)
                {
                    *(lcdmem+x+800*y) = red;
                }
                else if(y>=320)
                {
                    *(lcdmem+x+800*y) = yellow;
                }
            }
        }

        sleep(1);//睡眠3秒

        for(y=0; y<480; y++)
        {
            for(x=0; x<266; x++)
            {
                *(lcdmem+x+800*y) = blue;
            }
            for(x=266; x<532; x++)
            {
                *(lcdmem+x+800*y) = white;
            }
            for(x=532; x<800; x++)
            {
                *(lcdmem+x+800*y) = red;
            }
        } 

        sleep(1);//睡眠3秒
    }
    
    
}